//
//  main.m
//  06-homeWork-NSDate
//
//  Created by 402030900@qq.com on 16/7/11.
//  Copyright © 2016年 402030900@qq.com. All rights reserved.
//

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
//    1.计算当前时间和一个固定时间的差值,如果差值在60秒内,输出"刚刚",如果在60秒外3600秒内,输出"xx分钟前",如果3600秒外, 3600*24秒内,输出"xx小时前"

    NSDate * nowDate = [NSDate date];
    // 设置当地时间
    NSTimeZone * zone  = [NSTimeZone systemTimeZone];
    NSInteger interval = [zone secondsFromGMT];// GMT格林威治标准时间(seconds:秒)
    nowDate = [nowDate dateByAddingTimeInterval:interval];
    NSLog(@"%@",nowDate);
    // 设定当前固定时间
//    NSDate  * date1 = [NSDate dateWithTimeIntervalSinceNow:-200];
//    date1 = [date1 dateByAddingTimeInterval:interval];
//    // 求间隔时间
//    NSTimeInterval timeInterval = [nowDate timeIntervalSinceDate:date1];
    NSString * setTime = @"2016-07-12 08:11:11";
    NSDateFormatter * format = [[NSDateFormatter alloc]init];
    [format setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
    NSDate * setDate = [format dateFromString:setTime];
    NSInteger setInterval = [zone secondsFromGMTForDate:setDate];
    NSDate * setDate1 = [setDate dateByAddingTimeInterval:setInterval];
    NSTimeInterval timeInterval = [nowDate timeIntervalSinceDate:setDate1];
    NSLog(@"%f",timeInterval);
    if (timeInterval <= 60) {
        NSLog(@"刚刚");
    } else if (timeInterval <= 3600) {
        NSLog(@"%.f分钟前",timeInterval / 40);
    } else if (timeInterval <= 3600 * 24) {
        NSLog(@"%.f小时前",timeInterval / 3600);
    } else {
        NSLog(@"%@",setDate1);
    }
    
//    2.将字符串@"2016年04月01日 01点20分18秒"转换为NSDate对象。
#if 0
    NSDateFormatter * dateFormatter = [[NSDateFormatter alloc]init];
//    dateFormatter.timeZone = [NSTimeZone timeZoneForSecondsFromGMT:8 * 60];
    [dateFormatter setDateFormat:@"yyyy年mm月dd日 \n hh点mm分ss秒"];
    NSString * str = @"2016年04月01日 01点20分18秒";
    NSDate * dateStr = [dateFormatter dateFromString:str];
    NSLog(@"%@",dateStr);//转过来的时间会被回归到零时区的时间
    NSDate * BeijingDate = [dateStr dateByAddingTimeInterval:8 * 60 * 60];
    NSLog(@"%@",BeijingDate);
#endif
    //    3.将1468232420转成日期类型
 
//    NSNumber * number = @1468232420;
//    NSDate * numberDte = [NSDate dateWithTimeIntervalSinceReferenceDate:[number doubleValue]];
//    NSLog(@"%@",numberDte);
#if 0
    NSString * string = @"1468232420";
    NSData * data = [string dataUsingEncoding:NSUTF8StringEncoding];
    NSLog(@"data = %@",data);
#endif
//    4.研究NSDateComponents
#if 0
    NSDateComponents将时间表示成适合人类阅读和使用的方式，通过NSDateComponents可以快速而简单地获取某个时间点对应的“年”，“月”，“日”，“时”，“分”，“秒”，“周”等信息。当然一旦涉及了年月日时分秒就要和某个历法绑定，因此NSDateComponents必须和NSCalendar一起使用，默认为公历。
    // 第一种方式
    // 先定义一个遵循某个历法的日历对象
    NSCalendar *greCalendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
    // 通过已定义的日历对象，获取某个时间点的
    NSDateComponents表示，并设置需要表示哪些信息（NSYearCalendarUnit, NSMonthCalendarUnit, NSDayCalendarUnit等）NSDateComponents *dateComponents = [greCalendar components:NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit | NSWeekCalendarUnit | NSWeekdayCalendarUnit | NSWeekOfMonthCalendarUnit | NSWeekOfYearCalendarUnit fromDate:[NSDate date]];
    NSLog(@"year(年份): %i", dateComponents.year);
    NSLog(@"quarter(季度):%i", dateComponents.quarter);
    NSLog(@"month(月份):%i", dateComponents.month);
    NSLog(@"day(日期):%i", dateComponents.day);
    NSLog(@"hour(小时):%i", dateComponents.hour);
    NSLog(@"minute(分钟):%i", dateComponents.minute);
    NSLog(@"second(秒):%i", dateComponents.second);
    // Sunday:1, Monday:2, Tuesday:3, Wednesday:4, Friday:5, Saturday:6NSLog(@"weekday(星期):%i", dateComponents.weekday);// 苹果官方不推荐使用weekNSLog(@"week(该年第几周):%i", dateComponents.week);NSLog(@"weekOfYear(该年第几周):%i", dateComponents.weekOfYear);NSLog(@"weekOfMonth(该月第几周):%i", dateComponents.weekOfMonth);
    // 第二种方式
    // 先定义一个遵循某个历法的日历对象
    NSCalendar *greCalendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
    // 定义一个NSDateComponents对象，设置一个时间点
    NSDateComponents *dateComponentsForDate = [[NSDateComponents alloc] init];[dateComponentsForDate setDay:6];[dateComponentsForDate setMonth:5];[dateComponentsForDate setYear:2004];
    // 根据设置的dateComponentsForDate获取历法中与之对应的时间点
    // 这里的时分秒会使用NSDateComponents中规定的默认数值，一般为0或1。NSDate *dateFromDateComponentsForDate = [greCalendar dateFromComponents:dc];
    // 定义一个NSDateComponents对象，设置一个时间段
    NSDateComponents *dateComponentsAsTimeQantum = [[NSDateComponents alloc] init];[dateComponentsForDate setDay:6];
    // 在当前历法下，获取6天后的时间点
    NSDate *dateFromDateComponentsAsTimeQantum = [greCalendar dateByAddingComponents:dateComponentsAsTimeQantum toDate:[NSDate date] options:0];
    // 第三种方式
    // 先定义一个遵循某个历法的日历对象
    NSCalendar *greCalendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
    // 根据两个时间点，定义NSDateComponents对象，从而获取这两个时间点的时差
    NSDateComponents *dateComponents = [greCalendar components:NSYearCalendarUnit fromDate:[NSDate dateWithTimeIntervalSince1970:0] toDate:[NSDate date] options:0];
    NSLog(@"number of years:%i", dateComponents.year);
    
#endif
    
    
    return 0;
}
